package compilador.semantico;

import java.util.LinkedList;
import java.util.List;

public class Metodo implements Variavel {

	private String nome;
	private String tipo;
	private List<Atributo> parametros = new LinkedList<Atributo>();

	public Metodo(String nome, String tipo) {
		this.nome = nome;
		this.tipo = tipo;
	}

	public void addParametro(Atributo att) {
		this.parametros.add(att);
	}

	@Override
	public String getNome() {
		return nome;
	}

	@Override
	public String getTipo() {
		return tipo;
	}

	@Override
	public boolean temFilhos() {
		return false;
	}

	@Override
	public boolean temParametros() {
		return true;
	}

	public Atributo getParametro(int index) {
		try {
			return parametros.get(index - 1);
		} catch (ArrayIndexOutOfBoundsException e) {
			return null;
		}
	}

	public int getNumParametros() {
		return parametros.size();
	}

	@Override
	public String toString() {
		StringBuilder buf = new StringBuilder();
		buf.append(nome);
		buf.append('(');
		for (Atributo att : parametros) {
			buf.append(att.toString());
			buf.append(' ');
		}
		buf.append("):");
		buf.append(tipo);
		buf.append('\n');
		return buf.toString();
	}
}
